package xio.leetcode.java;

import java.util.Arrays;
import java.util.HashSet;

/**
 * 345. Reverse Vowels of a String (Easy)
 * 编写一个函数，以字符串作为输入，反转该字符串中的元音字母。
 * <p>
 * 示例 1:
 * <p>
 * 输入: "hello"
 * 输出: "holle"
 * 示例 2:
 * <p>
 * 输入: "leetcode"
 * 输出: "leotcede"
 *
 * 思路：双指针遍历。一个指针从头向尾遍历，一个指针从尾到头遍历。
 */
public class LC345_ReverseVowels {

    final static HashSet<Character> vowels = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u',
            'A', 'E', 'I', 'O', 'U'));

    public String reverseVowels(String s) {
        int i = 0;
        int j = s.length() - 1;
        char[] result = s.toCharArray();

        while (i < j) {
            char ic = result[i];
            char jc = result[j];
            if (!vowels.contains(ic)) {
                i++;
            } else if (!vowels.contains(jc)) {
                j--;
            } else {
                result[i] = jc;
                result[j] = ic;
                i++;
                j--;
            }
        }
        return new String(result);
    }

    public static void main(String[] args) {
        LC345_ReverseVowels rv = new LC345_ReverseVowels();
        String vr = rv.reverseVowels("hello");
        System.out.println(vr);
    }
}
